#ifndef SYMBOLEVALUE_H
#define SYMBOLEVALUE_H

#include <string.h>
#include <iostream>
// #include <iomanip>
using namespace std;

#include "Symbole.h"
#include "Arbre.h"
//#include "Valeur.h"
#include "NoeudVisitor.h"
//#include "NoeudVisitor.h"

class SymboleValue : public Symbole,  // un symbole valué est un symbole qui a une valeur, définie ou pas
            public Noeud  {  // et c'est aussi une feuille de l'arbre abstrait
public:
    SymboleValue(Symbole s, string type, unsigned int ligne=99); // construit un symbole valué à partir d'un symbole existant s
    ~SymboleValue( ) {}
    Valeur*  getValeur();
    string  getType() { return type; }
    void setValeur(Valeur* valeur);
    	inline unsigned int getLigne()           { return this->ligne;}     // accesseur
    inline bool estDefini()              {
        return defini;                        // accesseur
    }
    void Accept(NoeudVisitor& visitor);

    friend ostream & operator << (ostream & cout, SymboleValue symb); // affiche un symbole value sur cout

private:
    bool defini;	// indique si la valeur du symbole est définie
    Valeur *valeur;	// valeur du symbole si elle est définie, zéro sinon
     	unsigned int ligne;
   // typeSymbole type;
    string type;
};

#endif /* SYMBOLEVALUE_H */
